!--------------------------------
! Programa dedicado a calcular as raizes
! de um numero complexo qualquer na forma:
! (z-a)^(1/N) com z complexo, N inteiro
! e a real
! 
!
! Resultado em linha de comando.
!
! Programa compilado e testado com:
! $ gfortran -o exec02 exec02.f90
! $ ./exec02
! 
! Forma de utilizacao auto-explicativa
! atravez de comentarios.
!
! _o_o_ oOo _o_o_ 31/08/2010

PROGRAM exec02
  IMPLICIT NONE
  INTEGER :: N, nn
  REAL :: zr, zi, a, amodulo, fase, afase, pi
  pi = 3.1415927 
  write(*,*) "- Programa dedicado a calcular as raizes de um numero imaginario"
  write(*,*) "qualquer na forma (z-a)**(1./n), com z complexo, a real e N inteiro."
  write(*,*) "- Entre com a ordem da raiz (N)."
  read(*,*) N
  write(*,*) "- Entre com a parte real e a parte imaginaria de z,"
  write(*,*) "separadas por espaco (zr zi)."
  read(*,*) zr, zi
  write(*,*) "- Entre com o numero real a subtrair de z (a)."
  read(*,*) a

  amodulo = ( (zr-a)**2 + zi**2 )**0.5
  fase=ATAN(zi/zr)
  IF (zr<0) THEN
        fase = fase+pi
  END IF

  write(*,*) "As raizes sao:"
  nn=0
  amodulo=amodulo**(1.0/N)
  DO WHILE (nn<N)
    afase = fase/N + nn*2*pi/N
    write(*,*) "(", amodulo*COS(afase),",",  amodulo*SIN(afase), ")"
    nn=nn+1
  END DO
END PROGRAM
